package Presenter;

import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import Models.LegacySales;
import Models.Sale;

public class SalePresenter extends AbstractPresenter<Sale> {
	final String SINGLEITEM = "sales";
	final String MULTIITEM = "saless";
	
	public ArrayList<Sale> tryJSONParseArray(String input){
		return super.doJSONParseArray(input, SINGLEITEM, MULTIITEM);
	}
	
	public Sale tryJSONParse(String input){
		return super.doJSONParse(input, SINGLEITEM);
	}
	
	public Sale createItemFromJSONObject(JSONObject jsonObject){
		Sale item = new Sale();
		try{
			item.setDate(timeFormat.parse(jsonObject.getString("SDate")));
			item.setId(jsonObject.getInt("SId"));
			item.setKegID(jsonObject.getInt("kegID"));
			item.setNotes(jsonObject.getString("SNotes"));
			item.setPriceOverride(jsonObject.getDouble("priceOver"));
			item.setSalesFGIQty(jsonObject.getInt("salesFGIQty"));
			item.setServingTankSaleVolume(jsonObject.getDouble("servingTankVolume"));
			item.setUnitPrice(jsonObject.getDouble("unitPrice"));
			
			if(!jsonObject.isNull("custID")){
				CustomerPresenter presenter = new CustomerPresenter();
				JSONObject jsonGroup = jsonObject.getJSONObject("custID");
				item.setCustomerId(presenter.createItemFromJSONObject(jsonGroup));
			} else {
				item.setCustomerId(null);
			}
			if(!jsonObject.isNull("SDisc")){
				DiscountCodePresenter presenter = new DiscountCodePresenter();
				JSONObject jsonGroup = jsonObject.getJSONObject("SDisc");
				item.setDiscountCodeId(presenter.createItemFromJSONObject(jsonGroup));
			} else {
				item.setDiscountCodeId(null);
			}
			if(!jsonObject.isNull("salesFGIID")){
				FGIPresenter presenter = new FGIPresenter();
				JSONObject jsonGroup = jsonObject.getJSONObject("salesFGIID");
				item.setSalesFGIID(presenter.createItemFromJSONObject(jsonGroup));
			} else {
				item.setSalesFGIID(null);
			}
			
			//Set Legacy Sales Collection
			ArrayList<LegacySales> legacySales = new ArrayList<LegacySales>();
			if(!jsonObject.isNull("legacySalesCollection")){
				Object itm = jsonObject.get("legacySalesCollection");
				LegacySalesPresenter presenter = new LegacySalesPresenter();
				if(itm instanceof JSONArray){
					JSONArray jPSTArray = (JSONArray)itm;
					for(int i=0; i<jPSTArray.length(); i++){
						JSONObject jsonItem = jPSTArray.getJSONObject(i);
						legacySales.add(presenter.createItemFromJSONObject(jsonItem));
					}
				} else {
					JSONObject jsonItem = (JSONObject)itm;
					legacySales.add(presenter.createItemFromJSONObject(jsonItem));
				}
				item.setLegacySales(legacySales);
			}
			
			return item;
		} catch(JSONException ex){
			ex.printStackTrace();
		} catch(Exception ex){
			ex.printStackTrace();
		}
		return null;
	}
	
	public JSONObject createJSON(Sale item){
		try{
			JSONObject json = new JSONObject();
			
			json.put("SDate", getDate(item.getDate()));
			json.put("SId", item.getId());
			json.put("kegID", item.getKegID());
			json.put("SNotes", item.getNotes());
			json.put("priceOver", item.getPriceOverride());
			json.put("salesFGIQty", item.getSalesFGIQty());
			json.put("servingTankVolume", item.getServingTankSaleVolume());
			json.put("unitPrice", item.getUnitPrice());
			
			if(item.getCustomerId()!=null){
				CustomerPresenter presenter = new CustomerPresenter();
				json.put("custID", presenter.createJSON(item.getCustomerId()));
			} else {
				json.put("custID", JSONObject.NULL);
			}
			if(item.getDiscountCodeId()!=null){
				DiscountCodePresenter presenter = new DiscountCodePresenter();
				json.put("SDisc", presenter.createJSON(item.getDiscountCodeId()));
			} else {
				json.put("SDisc", JSONObject.NULL);
			}
			if(item.getSalesFGIID()!=null){
				FGIPresenter presenter = new FGIPresenter();
				json.put("salesFGIID", presenter.createJSON(item.getSalesFGIID()));
			} else {
				json.put("salesFGIID", JSONObject.NULL);
			}
			
			//Create Legacy Sales Collection
			if(item.getLegacySales()!=null){
				LegacySalesPresenter presenter = new LegacySalesPresenter();
				if(item.getLegacySales().size()>0){
					JSONArray jsonArray = new JSONArray();
					for(int i=0; i<item.getLegacySales().size(); i++){
						jsonArray.put(presenter.createJSON(item.getLegacySales().get(i)));
					}
					json.put("legacySalesCollection", jsonArray);
				}
			}
			return json;
		} catch(JSONException ex){
			ex.printStackTrace();
		}
		return null;
	}
	
	public Sale getEmptyEntity(){
		Sale entity = new Sale();
		return entity;
	}
}
